<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/actions/qualitydepartmentemployee/QualityDepartmentEmployeeAction.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/actions/Response.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/model/Service/Service.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/model/Service/ServiceFactory.php';

final class IndicatorAverageValuesAction extends QualityDepartmentEmployeeAction {
	protected function execute(Response $response) {
		/* получение типов структурных подразделений
		 * и активного типа, выбранного пользователем */
		$serviceFactory = new ServiceFactory();
		$service = $serviceFactory->getService('DepartmentTypeService');
		$types = $service->getAll();
		
		$response->setParameter('types', $types);
		$response->setParameter('type', 0); // выполняется только для всего университета, type=0

		/* определение года, для которого выполняется
		 * просмотр целевых показателей */
		if(isset($_POST['year'])) {
			$year = $_POST['year'];
		} elseif (isset($_SESSION['year'])) {
			$year = unserialize($_SESSION['year']);
		} else {
			$year = date("Y");
		}
		$_SESSION['year'] = serialize($year);


		/*Находим все departments университета, т.е. 1,2,3*/
		$service = $serviceFactory->getService('DepartmentService');
		$type = new DepartmentType();
		$departments = array();
		for ($i = 1; $i <= 3; $i++) {
			$type->setIdentity($i);
			$d=$service->findByType($type);
			if ($d != null) {
				$departments = array_merge($departments,$d);
			}
		}

		/*Находим все responsibilities по университету*/
		$service = $serviceFactory->getService('ResponsibilityService');
		$resps = array();
		foreach ($departments as $d) {
			$r =$service->getByDepartmentAndYear($d->getIdentity(), $year);
			if ($r != null) {
				$resps = array_merge($resps,$r);
			}
		}

		$indicators = array();
		$avg = array();
		$indSrv = $serviceFactory->getService('IndicatorValueService');
		foreach ($resps as $r) {
			if (!array_key_exists($r->getIndicator()->getIdentity(), $indicators)) {
				$indicators[$r->getIndicator()->getIdentity()]=$r->getIndicator();
			} 
			if (!array_key_exists($r->getIndicator()->getIdentity(), $avg)) {
				/*0-planValue, 1-4- количество значений по кварталам, 5-8 фактические значения по кварталам в %*/
				for ($i = 0; $i < 9; $i++) {
					$avg[$r->getIndicator()->getIdentity()][$i]=0;
				}
			}
// 			if($r->getIndicator()->getPlanValue()==null) {
// 				$avg[$r->getIndicator()->getIdentity()][0]=($avg[$r->getIndicator()->getIdentity()][0]+$r->getPlanValue())/2;
// 			} else
//				$avg[$r->getIndicator()->getIdentity()][0]=($avg[$r->getIndicator()->getIdentity()][0]+$r->getIndicator()->getPlanValue())/2;
			$indValues = $indSrv->getByResponsibility($r->getIdentity());
			if($indValues !=null){
				foreach ($indValues as $ind) {
					if($ind->getPlanValue()!=0){
						$avg[$r->getIndicator()->getIdentity()][$ind->getQuarter()]++;
						$avg[$r->getIndicator()->getIdentity()][$ind->getQuarter()+4]=($avg[$r->getIndicator()->getIdentity()][$ind->getQuarter()+4]+($ind->getValue()/$ind->getPlanValue()));
					}	
					//$avg[$r->getIndicator()->getIdentity()][$ind->getQuarter()]=($avg[$r->getIndicator()->getIdentity()][$ind->getQuarter()]+$ind->getPlanValue())/2;
					//$avg[$r->getIndicator()->getIdentity()][$ind->getQuarter()+4]=($avg[$r->getIndicator()->getIdentity()][$ind->getQuarter()+4]+$ind->getValue())/2;
				} 
			}
		}
		foreach ($avg as $average) {
		for ($i = 1; $i <= 4; $i++) {
					if ($average[$i]!=0) {
						$average[$i+4]=$average[$i+4]/$i*100;
					}
				}
		}
		$response->setParameter('avg', $avg);
		$response->setParameter('indicators', $indicators);
		$response->setParameter('title', 'Мониторинг средних значений целевых показателей');
	}
}
?>